package com.whcoding.test.common;

import java.lang.reflect.Field;
import java.lang.reflect.Type;

/**
 * @program: spring-boot-learning
 * @description: 判断对象是否为空，进一步判断对象中的属性是否都为空 <
 * @author: whcoding
 * @create: 2022-09-06 17:06
 **/
public class CheckObjectIsNullUtils {

	/**
	 * 判断对象是否为空，且对象的所有属性都为空
	 * ps: boolean类型会有默认值false 判断结果不会为null 会影响判断结果
	 * 序列化的默认值也会影响判断结果
	 *
	 * @param object
	 * @return
	 */
	public static boolean objCheckIsNull(Object object) {
		// 得到类对象
		Class clazz = (Class) object.getClass();
		// 得到所有属性
		Field[] fields = clazz.getDeclaredFields();
		//定义返回结果，默认为true
		boolean flag = true;
		for (Field field : fields) {
			field.setAccessible(true);
			Object fieldValue = null;
			try {
				//得到属性值
				fieldValue = field.get(object);
				//得到属性类型
				Type fieldType = field.getGenericType();
				// 得到属性名
				String fieldName = field.getName();
				System.out.println("属性类型：" + fieldType + ",属性名：" + fieldName + ",属性值：" + fieldValue);
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
			//只要有一个属性值不为null 就返回false 表示对象不为null
			if (fieldValue != null) {
				flag = false;
				break;
			}
		}
		return flag;
	}
}
